package com.webserver.core;

import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;

/**
 * 项目的主类，用于启动WebServer
 * 该项目主要功能是实现Tomcat这个WebServer的核心功能
 * 了解HTTP协议以及浏览器与服务端之间的处理细节
 * 了解SpringMVC核心类的设计与实现
 * PS:
 * ss对象为ServerSocket对象
 * s对象为Socket对象
 * 主动说用输出流
 * 主动听用输入流
 * @author XingHaiYang
 * @date 2022/9/15 19:36
 */
public class BirdBootApplication {
    /**
     * 定义ss对象
     */
    private ServerSocket ss;

    /**
     * 给ss对象赋值，申请端口号，并监听此端口号
     */
    public BirdBootApplication() {
        try {
            System.out.println("服务端正在启动...");
            ss = new ServerSocket(8088);
            System.out.println("服务端启动成功！");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    /**
     * 此为服务端，在自定义的start方法里获取s对象，相当于用总机获取分机，
     * 然后调用自定义的线程，线程里定义了服务端听和说的过程，也就是解析请求和发送响应的过程，
     * 后续还会加处理请求的过程（也就是服务端听客户端说了点啥，然后服务端应该回应点啥）
     */
    public void start(){
        try {
            System.out.println("客户端连接中...");
            Socket s = ss.accept();
            System.out.println("一个客户端连接成功！");
            // 将服务端主动听的任务封装在线程里
            Runnable r = new ClientHandler(s);
            Thread t = new Thread(r);
            t.start();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    /**
     * 程序的入口，创建服务端对象，并调用自定义的start方法，完成客户端与服务端的交互
     * @param args
     */
    public static void main(String[] args) {
        BirdBootApplication bba = new BirdBootApplication();
        bba.start();
    }
}
